"""
1，详细总结类和对象知识点，包括:
类的定义
对象的初始化类属性
实例属性实例方法类方法静态方法
继承重写
super 函数

2，定义一个类 Dog,包含2个属性:名字和年龄。定义一个方法 eat吃东西。
定义一个类TeddyDog,继承Dog类,Teddy在吃东西的时候还会望着你，定义方法 watch_you.
定义一个类BabyTeddyDog,继承TeddyDog，BabyTeddy吃东西不仅会望着你，还会四处转悠，定义方法 go_around

二、选作题（不需要提交)1.编写如下程序
编写一个工具箱类和工具类
工具类:需要有工具具的名称、功能描述、价格。
工具箱类:能够添加工具、删除工具、查看工具，并且能获取工具箱中工具的总数。
实例化几个工具。并在工具箱对象当中做添加/删除/查看工具操作，获取工具箱对象中有几个工具。
工具比如锤子、斧头、螺丝刀等工具。
提示:不需要用到继承。

"""
# 1.
# 类的定义
# 抽象的，对象共有特征

# 对象的初始化类属性
# def__init__（self，参数）
# 类属性
# 类属性 = 值   cls.类属性 表示类的属性
# 实例属性实例方法类方法静态方法
# 实例属性：实例属性(只有对象可以访问)：self.xxx（类） 或者对象.XXX
# 实例方法：self 对象调用
# 类方法：cls @classmethod   类和对象都可以调用，一般是类去调用
# 静态方法：@staticmethod
# def 函数名称（）：
#     函数实现

# 继承重写

# super 函数

# 2.定义一个类 Dog,包含2个属性:名字和年龄。定义一个方法 eat吃东西。
# 定义一个类TeddyDog,继承Dog类,Teddy在吃东西的时候还会望着你，定义方法 watch_you.
# 定义一个类BabyTeddyDog,继承TeddyDog，BabyTeddy吃东西不仅会望着你，还会四处转悠，定义方法 go_around
class Dog:
    def __init__(self, name, age):
        self.dog_name = name
        self.dog_age = age

    def eat(self):
        print("吃东西")


class TeddyDog(Dog):
    def watch_you(self):
        self.eat()
        print("望着你")

class BabyTeddtDog(TeddyDog):
    def go_around(self):
        self.watch_you()
        print("四处转悠")

huhu = BabyTeddtDog("huhu", "4")
huhu.eat()


# 3.编写一个工具箱类和工具类
# 工具类:需要有工具具的名称、功能描述、价格。
# 工具箱类:能够添加工具、删除工具、查看工具，并且能获取工具箱中工具的总数。
# 实例化几个工具。并在工具箱对象当中做添加/删除/查看工具操作，获取工具箱对象中有几个工具。
# 工具比如锤子、斧头、螺丝刀等工具。
# 提示:不需要用到继承。

class Instrument():
    def __init__(self, name, function, price):
        self.name = name
        self.function = function
        self.price = price

    def print_tool_info(self):
        print(f"工具的名称{self.name}\n工具的作用{self.function}\n工具的价格{self.price}\n")


class Work_box():
    def __init__(self):
        self.tools = []     #定义一个列表，存放工具类的对象

    def add_tool(self, tool_obj):
        if tool_obj not in self.tools:    #tool_obj作为参数，如果没在列表里
            self.tools.append(tool_obj)   #就添加

        else:
            print("此工具箱里已有这个工具")

    def del_tool(self, tool_obj):
        if tool_obj in self.tools:
            self.tools.remove(tool_obj)

        else:
            print("此工具箱没有这个工具")

    def get_tool(self, tool_obj: Instrument):
        if tool_obj in self.tools:
            tool_obj.print_tool_info()

        else:
            print("此工具箱没有这个工具")

    def get_count_of_tools(self):
        count = len(self.tools)
        print(count)


# 实例化工具
tool1 = Instrument("螺丝刀", "扭螺丝", 15)
tool2 = Instrument("锤子", "锤地", 30)
tool3 = Instrument("锄头", "挖墙脚", 150)


# 实例化工具箱
box = Work_box()

# 添加工具到工具箱
box.get_count_of_tools()
box.add_tool(tool1)
box.add_tool(tool2)
box.add_tool(tool3)
box.get_count_of_tools()
box.get_tool(tool2)
box.get_tool(tool1)
box.del_tool(tool1)
box.get_tool(tool1)
box.get_count_of_tools()